package me.zhengjie.tool;



/**
 * null point exception tool
 * @author tianqi
 *
 */
public class NPETool extends ValidateUtil {
	/**
	 * 逐个判定传入的多个参数是否为null，如果其中有为null的参数，则抛出异常
	 * 异常信息示例：
	 *   【String, HashMap, String】
	 *   【第1、3个参数为null】
	 * @param params
	 */
	public static void multipleIsEmptyThrowException(Object... params) {
		String prefix = "\r\n【";
		String nullNum = "【第";
		boolean isEmpty = false;
		if (params != null && params.length != 0) {
			for (int i = 0; i < params.length; i++) {
				prefix = prefix + params[i].getClass().getSimpleName() + ", ";
				if (ValidateUtil.isEmpty(params[i])) {
					isEmpty = true;
					nullNum = nullNum + (i+1) + "、";
				}
			}
		}
		if (isEmpty) {
			prefix = prefix.substring(0, prefix.length()-2) + "】\r\n" + nullNum.substring(0, nullNum.length()-1) + "个参数为null】";
			throw new IllegalArgumentException(prefix);
		}
	}

	/**
	 * 如果判定传入第一个参数为NULL，则抛出常规异常信息
	 * @param needJudgeIsEmptyObject 需要判定是否为NULL的对象
	 * @param needJudgeIsEmptyObjectName 需要判定是否为NULL的对象名称
	 */
	public static void isEmptyThrowException (Object needJudgeIsEmptyObject, String needJudgeIsEmptyObjectName) {
		if (ValidateUtil.isEmpty(needJudgeIsEmptyObject)) {
			throw new IllegalArgumentException("【没有获取到 " + needJudgeIsEmptyObjectName + " 】");
		}
 	}

	/**
	 * 如果判定传入第一个参数为NULL，则抛出自定义异常信息
	 * @param needJudgeIsEmptyObject 需要判定是否为NULL的对象
	 * @param needJudgeIsEmptyObjectName 需要判定是否为NULL的对象名称
	 * @param errorMessage 异常错误信息
	 */
	public static void isEmptyThrowException (Object needJudgeIsEmptyObject, String needJudgeIsEmptyObjectName, String errorMessage) {
		if (ValidateUtil.isEmpty(needJudgeIsEmptyObject)) {
			throw new IllegalArgumentException ("【" + needJudgeIsEmptyObjectName + errorMessage + "】");
		}
 	}

	/**
	 * 如果判定传入第一个参数为null，则返回第二个传入参数
	 * @param needJudgeIsEmptyObject 需要判定是否为NULL的对象
	 * @param returnNewObject 判定第一个参数为NULL后，则返回第二个传入参数
	 * @return
	 */
	public static Object isEmptyUse (Object needJudgeIsEmptyObject, Object returnNewObject) {
		if (ValidateUtil.isEmpty(needJudgeIsEmptyObject)) {
			return returnNewObject;
		}
		return needJudgeIsEmptyObject;
	}

	/**
	 * 如果获取到空返回空串
	 * @param object
	 * @return
	 */
	public static String isEmptyReturnString(Object object){
		return ValidateUtil.isEmpty(object) ? "" : object.toString();
	}
}
